package util.www.sql;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import util.form.respuesta.ValorObject;

public class UpdateSql 
extends AbstractInsertUpdateSql
{

	private String where;
	private final Map<String,Boolean> columnasClaveMap = new HashMap<String,Boolean>();
	private final WhereSql w = new WhereSql();
	
	public UpdateSql(String nombreTabla, String[] columnasClave) throws SQLException {
		super(nombreTabla);
		inicializar(columnasClave);
	}
	
	/*
	public UpdateSql(Registro reg, String[] columnasClave) throws SQLException {
		super(reg);
		inicializar(columnasClave);
	}*/
	
	private void inicializar(String[] columnasClave) {
		if(columnasClave!=null) {
			for(String col : columnasClave) {
				columnasClaveMap.put(col.toUpperCase(Locale.getDefault()),true);
			}
		}
	}
	
		
	@Override
	public void agregar(String columna, String valor) throws SQLException {		 
		Boolean b = columnasClaveMap.get(columna.toUpperCase(Locale.getDefault()));
		boolean esColumnaClave = (b!=null);
		
		if(esColumnaClave) {
			w.and(columna+"=",valor);
		}
		else {			
			if(sbValores.length()>0) {
				sbValores.append(",");
			}
			sbValores.append(columna);
			sbValores.append("=");
			
			ValorObject v = new ValorObject();
			v.setClaseValor(String.class);
			v.setObjeto(valor);
			sbValores.append(v.getValorSql());
			/*
			sbValores.append("'");
			sbValores.append(valor);
			sbValores.append("'");
			*/
		}
	}
	
	
	@Override
	public String getSqlInterno() throws SQLException{
		if(sbValores.length()>0) {		
			if(where==null || where.trim().isEmpty()) {
				if(w.isEmpty())
					throw new SQLException("Sentencia Where no encontrada");
				else
					where = w.getSql();
			}		
			return "update "+this.nombreTabla
					+" set "+sbValores.toString()
					+" "+where;
		}
		return "";
	}
	

	public String getWhere() {
		return where;
	}

	public void setWhere(String where) {
		this.where = where;
	}
	
	
		
}
